package DB;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author pgrabin
 * @param <T>
 */
public abstract class EntityBase<T> {

    /**
     * Atualiza um registro já existente
     * 
     * @param novo O objeto gravado, já com seus atributos alterados.
     * @return A quantidade de linhas afetadas.
     * @throws java.sql.SQLException
     */
    public abstract long update(T novo) throws SQLException;
    
    /**
     * Deleta o registro com o ID informado da tabela.
     * 
     * @param id O ID do registro a ser deletado.
     * @return A quantidade de linhas afetadas
     * @throws java.sql.SQLException
     */
    public abstract int delete(long id) throws SQLException;

    public abstract T getByID(long id) throws SQLException;

    public abstract ArrayList<T> getAll() throws SQLException;
    
    public abstract T getFromResultSet(ResultSet rs) throws SQLException;
    
    public abstract int getRowsCount();
}